// 快手广告适配器
// 用于将微信广告API适配为快手广告API

declare const ks: any;

export class KuaishouAdAdapter {
  private static _instance: KuaishouAdAdapter = null;
  public static get Instance() {
    if (null == this._instance) {
      this._instance = new KuaishouAdAdapter();
    }
    return this._instance;
  }

  private rewardedVideoAd: any = null;
  private adUnitId = "2300034032_01"; // 快手激励广告ID
  private currentCallback: Function | null = null;
  private isAdReady = false;

  constructor() {
    this.initKuaishouAd();
  }

  /**
   * 初始化快手广告
   */
  private initKuaishouAd() {
    if (typeof ks === 'undefined') {
      console.log('快手环境未检测到，使用模拟模式');
      return;
    }

    try {
      const param = {
        adUnitId: this.adUnitId
      };
      
      this.rewardedVideoAd = ks.createRewardedVideoAd(param);
      
      if (this.rewardedVideoAd) {
        console.log('快手激励视频广告创建成功');
        this.setupAdEvents();
      } else {
        console.log('创建激励视频组件失败');
      }
    } catch (error) {
      console.error('初始化快手广告失败:', error);
    }
  }

  /**
   * 设置广告事件监听
   */
  private setupAdEvents() {
    if (!this.rewardedVideoAd) return;

    // 监听广告关闭事件
    this.rewardedVideoAd.onClose((res: any) => {
      console.log('快手激励视频广告关闭事件:', res);
      
      if (this.currentCallback) {
        if (res && res.isEnded) {
          // 正常播放结束，可以下发游戏奖励
          console.log('快手激励视频正常播放完成，发放奖励');
          this.currentCallback(true);
        } else {
          // 播放中途退出，不下发游戏奖励
          console.log('快手激励视频播放中途退出，不发放奖励');
          this.currentCallback(false);
        }
        this.currentCallback = null;
      }
    });

    // 监听广告错误事件
    this.rewardedVideoAd.onError((res: any) => {
      console.error('快手激励视频广告错误:', res);
      if (this.currentCallback) {
        this.currentCallback(false);
        this.currentCallback = null;
      }
    });

    // 监听广告加载成功事件
    this.rewardedVideoAd.onLoad(() => {
      console.log('快手激励视频广告加载成功');
      this.isAdReady = true;
    });
  }

  /**
   * 播放激励视频广告
   * @param callback 回调函数，参数为布尔值，true表示成功获得奖励，false表示失败
   */
  public showRewardedVideoAd(callback: Function): void {
    if (!this.rewardedVideoAd) {
      console.log('快手激励视频广告未初始化，模拟成功');
      setTimeout(() => callback(true), 500);
      return;
    }

    this.currentCallback = callback;

    try {
      const promise = this.rewardedVideoAd.show();
      
      if (promise && promise.then) {
        promise.then((result: any) => {
          // 激励视频展示成功
          console.log(`快手激励视频广告展示成功, result is ${result}`);
        }).catch((error: any) => {
          // 激励视频展示失败
          console.log(`快手激励视频广告展示失败, error is ${error}`);
          if (this.currentCallback) {
            this.currentCallback(false);
            this.currentCallback = null;
          }
        });
      }
    } catch (error) {
      console.error('播放快手激励视频广告失败:', error);
      if (this.currentCallback) {
        this.currentCallback(false);
        this.currentCallback = null;
      }
    }
  }

  /**
   * 检查广告是否可用
   */
  public isAdAvailable(): boolean {
    return this.rewardedVideoAd !== null;
  }

  /**
   * 预加载广告
   */
  public preloadAd(): void {
    if (this.rewardedVideoAd) {
      try {
        this.rewardedVideoAd.load();
      } catch (error) {
        console.error('预加载快手激励视频广告失败:', error);
      }
    }
  }

  /**
   * 模拟分享功能（快手平台用激励广告替代分享）
   * @param callback 回调函数
   */
  public simulateShare(callback?: Function): void {
    console.log('快手平台用激励广告替代分享功能');
    this.showRewardedVideoAd((success: boolean) => {
      if (success) {
        console.log('通过观看广告获得分享奖励');
      }
      if (callback) {
        callback(success);
      }
    });
  }
}
